package com.example.controller;

import com.example.common.PageResult;
import com.example.common.Result;
import com.example.entity.ImageBaseInfo;
import com.example.entity.QRCode;
import com.example.entity.User;
import com.example.service.QRCodeService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 二维码控制器
 */
@RestController
@RequestMapping("/api/qrcode")
public class QRCodeController {

    @Resource
    private QRCodeService qrCodeService;

    /**
     * 获取二维码列表
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 二维码列表
     */
    @GetMapping("/list")
    public Result<PageResult<QRCode>> list(
            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        // 计算偏移量
        int offset = (pageNum - 1) * pageSize;
        // 查询二维码列表
        List<QRCode> qrCodes = qrCodeService.queryAllByLimit(offset, pageSize);
        // 查询总记录数
        long total = qrCodeService.countQRCodes();
        // 返回分页结果
        return PageResult.restPage(pageNum, pageSize, total, qrCodes);
    }

    /**
     * 获取用户的二维码列表
     *
     * @param userId   用户ID
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 二维码列表
     */
    @GetMapping("/user/{userId}")
    public Result<PageResult<QRCode>> listByUser(
            @PathVariable("userId") Long userId,
            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        // 计算偏移量
        int offset = (pageNum - 1) * pageSize;
        // 查询用户的二维码列表
        List<QRCode> qrCodes = qrCodeService.queryByUserId(userId, offset, pageSize);
        // 查询用户的二维码总数
        long total = qrCodeService.countUserQRCodes(userId);
        // 返回分页结果
        return PageResult.restPage(pageNum, pageSize, total, qrCodes);
    }

    /**
     * 获取当前用户的二维码列表
     *
     * @param session  会话
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 二维码列表
     */
    @GetMapping("/my")
    public Result<PageResult<QRCode>> listMy(
            HttpSession session,
            @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        // 获取当前登录用户
        User user = (User) session.getAttribute("user");
        if (user == null) {
            return Result.unauthorized();
        }
        // 计算偏移量
        int offset = (pageNum - 1) * pageSize;
        // 查询用户的二维码列表
        List<QRCode> qrCodes = qrCodeService.queryByUserId(user.getId(), offset, pageSize);
        // 查询用户的二维码总数
        long total = qrCodeService.countUserQRCodes(user.getId());
        // 返回分页结果
        return PageResult.restPage(pageNum, pageSize, total, qrCodes);
    }

    /**
     * 获取二维码详情
     *
     * @param id 二维码ID
     * @return 二维码详情
     */
    @GetMapping("/{id}")
    public Result<QRCode> detail(@PathVariable("id") Long id) {
        QRCode qrCode = qrCodeService.queryById(id);
        if (qrCode != null) {
            return Result.success(qrCode);
        } else {
            return Result.error("二维码不存在");
        }
    }

    /**
     * 创建二维码
     *
     * @param qrCode  二维码信息
     * @param session 会话
     * @return 创建结果
     */
    @PostMapping("/create")
    public Result<QRCode> create(@RequestBody QRCode qrCode, HttpSession session) {
        // 获取当前登录用户
        User user = (User) session.getAttribute("user");
        if (user == null) {
            return Result.unauthorized();
        }
        // 设置创建用户ID
        qrCode.setUserId(user.getId());
        // 保存二维码信息
        QRCode insertedQRCode = qrCodeService.insert(qrCode);
        return Result.success(insertedQRCode);
    }

    /**
     * 更新二维码
     *
     * @param qrCode  二维码信息
     * @param session 会话
     * @return 更新结果
     */
    @PutMapping("/update")
    public Result<QRCode> update(@RequestBody QRCode qrCode, HttpSession session) {
        // 获取当前登录用户
        User user = (User) session.getAttribute("user");
        if (user == null) {
            return Result.unauthorized();
        }
        // 检查二维码是否存在
        QRCode existQRCode = qrCodeService.queryById(qrCode.getId());
        if (existQRCode == null) {
            return Result.error("二维码不存在");
        }
        // 检查是否有权限修改
        if (!existQRCode.getUserId().equals(user.getId())) {
            return Result.forbidden();
        }
        // 更新二维码信息
        QRCode updatedQRCode = qrCodeService.update(qrCode);
        return Result.success(updatedQRCode);
    }

    /**
     * 删除二维码
     *
     * @param id      二维码ID
     * @param session 会话
     * @return 删除结果
     */
    @DeleteMapping("/delete/{id}")
    public Result<Boolean> delete(@PathVariable("id") Long id, HttpSession session) {
        // 获取当前登录用户
        User user = (User) session.getAttribute("user");
        if (user == null) {
            return Result.unauthorized();
        }
        // 检查二维码是否存在
        QRCode qrCode = qrCodeService.queryById(id);
        if (qrCode == null) {
            return Result.error("二维码不存在");
        }
        // 检查是否有权限删除
        if (!qrCode.getUserId().equals(user.getId())) {
            return Result.forbidden();
        }
        // 删除二维码
        boolean result = qrCodeService.deleteById(id);
        if (result) {
            return Result.success(true);
        } else {
            return Result.error("删除失败");
        }
    }

    /**
     * 保存二维码图片
     *
     * @param id         二维码ID
     * @param base64Image Base64编码的图片数据
     * @param session    会话
     * @return 保存结果
     */
    @PostMapping("/saveImage/{id}")
    public Result<String> saveImage(
            @PathVariable("id") Long id,
            @RequestBody ImageBaseInfo base64Image,
            HttpSession session) {
        return Result.success(qrCodeService.saveQRCodeImage(qrCodeService.queryById(id), base64Image.getImageData()));
        // // 获取当前登录用户
        // User user = (User) session.getAttribute("user");
        // if (user == null) {
        //     return Result.unauthorized();
        // }
        // // 检查二维码是否存在
        // QRCode qrCode = qrCodeService.queryById(id);
        // if (qrCode == null) {
        //     return Result.error("二维码不存在");
        // }
        // // 检查是否有权限修改
        // if (!qrCode.getUserId().equals(user.getId())) {
        //     return Result.forbidden();
        // }
        // // 保存二维码图片
        // String imagePath = qrCodeService.saveQRCodeImage(qrCode, base64Image.getImageData());
        // if (imagePath != null) {
        //     // 更新二维码图片路径
        //     qrCode.setImagePath(imagePath);
        //     qrCodeService.update(qrCode);
        //     return Result.success(imagePath);
        // } else {
        //     return Result.error("保存图片失败");
        // }
    }
}